package KnowSparkSQL.DSL.DatasetMethods;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class DatasetSelectExprMethods {
    public static void main(String[] args) {
        /**
         * selectExpr的作用是选择特定的列，
         * 并作特殊处理后（如修改列名、取绝对值、四舍五入等），
         * 生成一个新的Dataset<Row>。
         * 和select的主要区别是该方法可以对列做特殊的处理。
         * selectExpr(
         * "name", "age as age_test", "round(age+0.523, 2) as age_round"
         * )
         * 方法会创建包含name、age_test和age_round三列的Dataset<Row>对象。
         * age_test即是age列，age_round是age列加上0.523后，
         * 进行四舍五入得到的新列。
         */

        SparkSession session = SparkSession.builder().appName(DatasetSelectExprMethods.class.getName()).master("local").getOrCreate();

        Dataset<Row> dataset = session.read().json("./data/student.json");

        dataset.selectExpr("name", "age as age_test", "round(age+0.523, 2) as age_round").show();

    }
}
